package com.hmj.javabean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;

//4个注解功能相同 名称不同只是为了进行区分 不同功能建议使用不同的注解
@Repository("u")//等价于<bean id="u" class="com.sqsf.javabean.User"></bean>
//@Scope("prototype")//对象范围配置 默认单例 等价于bean标签中 scope="prototype"
public class User {
    @Value("666666")
    private int id;
    @Value("喜羊羊")
    private String name;
    @Value("19")
    private int age;
    //自定义属性注入
    //需要先在spring容器中创建指定对象 然后将指定对象存入
    @Autowired//自动注入 根据当前属性类型查询数据进行注入
    @Qualifier("r")//两个标签组合使用可以先按照类型查找 然后按照id查询

    //java中也提供了类似的注解 只不过先按照属性名id查找 再按照类型查找
    //@Resource
    private Role r;

    public User() {
    }

    public Role getR() {
        return r;
    }

    public void setR(Role r) {
        this.r = r;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", r=" + r +
                '}';
    }
    //对象生命周期注解
    //配置对象创建时自动调用的初始化方法
    //关闭容器销毁对象时自动调用的销毁方法
    @PostConstruct//等价与bean标签中的init-method="a"
    public void a(){
        System.out.println("初始化方法....");
    }
    @PreDestroy//等价与bean标签中的destroy-method="b"
    public void b(){
        System.out.println("销毁方法.....");
    }
}